#ifndef __COMPONENTS_H__
#define __COMPONENTS_H__

#include "stdio.h"
#include "stdint.h"
#include "stdbool.h"
#include "stdlib.h"

/**
 * text_t - 文本结构体
 *
 * 用于存储文本的相关信息。
 */
typedef struct text
{
    char name[32]; /**< 文本内容 */
    int font_size; /**< 字体大小 */
    int fc;        /**< 前景色（字体颜色） */
    int bc;        /**< 背景色 */
} text_t;

/**
 * image_t - 图像结构体
 *
 * 用于存储图像的相关信息。
 */
typedef struct image
{
    uint8_t *img; /**< 图像数据指针 */
    int width;    /**< 图像宽度 */
    int height;   /**< 图像高度 */
} image_t;

/**
 * lcd_menu_t - 菜单项结构体
 *
 * 用于存储菜单项的相关信息。
 */
typedef struct lcd_menu
{
    image_t img;                              /**< 菜单项的图像 */
    text_t text;                              /**< 菜单项的文本 */
    int base_x;                               /**< 菜单项的基准X坐标 */
    int base_y;                               /**< 菜单项的基准Y坐标 */
    bool is_selected;                         /**< 菜单项是否被选中 */
    void (*enterFunc)(struct lcd_menu *menu); /**< 进入菜单项时的回调函数 */
    void (*exitFunc)(struct lcd_menu *menu);  /**< 退出菜单项时的回调函数 */
} lcd_menu_t;

/**
 * lcd_display_board_t - 显示板结构体
 *
 * 用于存储显示板的相关信息。
 */
typedef struct lcd_display_board
{
    image_t img; /**< 显示板的图像 */
    text_t text; /**< 显示板的文本 */
    int base_x;  /**< 显示板的基准X坐标 */
    int base_y;  /**< 显示板的基准Y坐标 */
} lcd_display_board_t;

int lcd_menu_init(void);
void lcd_menu_update(lcd_menu_t *menus[], int menu_num, int lcd_menu_selected_index);
int lcd_menu_show(lcd_menu_t *menus[], int menu_num);
int lcd_menu_entry(lcd_menu_t *menu);

int lcd_db_draw(lcd_display_board_t *db);
int lcd_db_show(lcd_display_board_t *lcd_dbs[], int db_num);

// void set_current_menus(lcd_menu_t **new_menus, int num_menus);

#endif
